package org.japo.java.swing.igu;

import org.japo.java.swing.beans.PanelFondo;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.GraphicsEnvironment;
import java.awt.GridLayout;
import java.awt.Image;
import java.net.URL;
import javax.swing.ImageIcon;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.border.BevelBorder;
import javax.swing.border.Border;
import org.japo.java.swing.listeners.GEA;

public class IGU extends JFrame {

    // Componentes del IGU
    private JLabel lblPrueba;
    private JComboBox<String> cbbFuente;

    // Valores predeterminados de fuente
    private final String FAMILIA = "Calibri";
    private final int ESTILO = Font.PLAIN;
    private final int TALLA = 40;

    // Recurso con la imagen de forndo del panel
    private final String RES_PKG = "/org/japo/java/resources/img";
    private final String RES_IMG = "fondo.jpg";
    private final String RECURSO = RES_PKG + "/" + RES_IMG;

    // Texto de prueba
    private final String TEXTO = "Érase una vez Java";

    public IGU() {
        iniciarComponentes();
    }

    private void iniciarComponentes() {
        // Panel principal
        JPanel pnlPrincipal = new JPanel();
        pnlPrincipal.setLayout(new GridLayout(2, 1));

        // Fuente de la etiqueta
        Font f = new Font(FAMILIA, ESTILO, TALLA);

        // Borde de etiqueta
        Border b = new BevelBorder(BevelBorder.LOWERED);

        // Etiqueta de prueba
        lblPrueba = new JLabel();
        lblPrueba.setFont(f);
        lblPrueba.setText(TEXTO);
        lblPrueba.setHorizontalAlignment(JLabel.CENTER);
        lblPrueba.setOpaque(true);
        lblPrueba.setBackground(Color.WHITE);
        lblPrueba.setBorder(b);
        pnlPrincipal.add(lblPrueba);

        // Imagen de fondo
        URL urlImagen = getClass().getResource(RECURSO);
        Image i = new ImageIcon(urlImagen).getImage();

        // Panel de control
        JPanel pnlControl = new PanelFondo(i);
        FlowLayout fl = new FlowLayout();
        fl.setVgap(30);
        pnlControl.setLayout(fl);
        pnlPrincipal.add(pnlControl);

        // Gestor de eventos de accion
        GEA gea = new GEA(this);

        // Obtener la lista de fuentes del sistema
        String[] listaFuentes = GraphicsEnvironment.
                getLocalGraphicsEnvironment().
                getAvailableFontFamilyNames();

        // Selector de fuentes
        cbbFuente = new JComboBox(listaFuentes);
        cbbFuente.setSelectedItem(FAMILIA);
        cbbFuente.setPreferredSize(new Dimension(300, 30));
        cbbFuente.addActionListener(gea);
        pnlControl.add(cbbFuente);

        // Ventana principal
        setTitle("Selección de fuente");
        setContentPane(pnlPrincipal);
        setResizable(false);
        setSize(400, 200);
        setLocationRelativeTo(null);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

    public void procesarFuente(Object o) {
        // Convierte el objeto en JComboBox
        JComboBox<String> lista = (JComboBox<String>) o;

        // Obtiene la familia seleccionada
        String familia = (String) lista.getSelectedItem();

        // Genera una nueva fuente
        Font f = new Font(familia, ESTILO, TALLA);

        // Aplica la fuente
        lblPrueba.setFont(f);
    }
}
